/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ssp.strategy.agent;

import java.util.List;
import ssp.agent.QualityRequirement;
import ssp.net.NWcomponent;
import ssp.service.FrontendServer;
import ssp.utility.Pair;

/**
 * Agent_v1のためのStrategyを表す抽象クラス
 * @author yamazaki
 */
public abstract class Agent_v1_Strategy implements AgentStrategy {
    
    /**
     * 候補となるフロントエンドサーバを探索し，その候補リストを返す
     * @param qualityRequiremant QoS要求
     * @param belongingNWcomponent ユーザが属するネットワークコンポーネント
     * @param num サービスマップから取得するフロントエンドサーバ数
     * @return 候補フロントエンドサーバリスト
     */
    public abstract List<FrontendServer> searchFrontendServer(QualityRequirement qualityRequiremant, NWcomponent belongingNWcomponent, int num);
    
    /**
     * 候補フロントエンドサーバからユーザまでのネットワークコンポーネントを探索し，その経路情報を返す
     * @param qos ユーザの要求
     * @param belongingNWcomponent ユーザが属するネットワークコンポーネント
     * @param frontendServerList 候補フロントエンドサーバリスト
     * @return 利用料金順に並んだ経路情報のMap
     */
    public abstract Pair<FrontendServer, List<NWcomponent>> searchPath(QualityRequirement qos, NWcomponent belongingNWcomponent, FrontendServer frontendServer);
    
}
